use log::{ Metadata, Record };
use tauri::AppHandle;
use tauri::Emitter;

// 自定义日志记录器
pub struct TauriLogger {
  app_handle: AppHandle,
}

impl TauriLogger {
  // 创建新的日志记录器实例
  pub fn new(app_handle: AppHandle) -> Self {
    Self { app_handle }
  }
}

// 实现 log::Log trait
impl log::Log for TauriLogger {
  fn enabled(&self, _metadata: &Metadata) -> bool {
    // 可以根据日志级别和目标进行过滤
    true
  }

  fn log(&self, record: &Record) {
    if self.enabled(record.metadata()) {
      // 准备要发送到前端的日志数据
      let level = format!("{:?}", record.level());
      let target = record.target().to_string();
      let message = record.args().to_string();

      // 发送日志事件到前端
      let _ = self
        .app_handle
        .emit("log-event", (level, target, message));
    }
  }

  fn flush(&self) {}
}

// 初始化日志系统的函数
pub fn init_logger(app_handle: AppHandle) -> Result<(), log::SetLoggerError> {
  let logger = TauriLogger::new(app_handle);
  log::set_boxed_logger(Box::new(logger))?;
  log::set_max_level(log::LevelFilter::Debug); // 设置日志级别
  Ok(())
}
